package com.th.coupon.controller;

import com.alibaba.fastjson.JSON;
import com.th.coupon.common.exception.BaseCloudException;
import com.th.coupon.common.vo.CouponTemplateSdk;
import com.th.coupon.entity.CouponTemplate;
import com.th.coupon.service.IBuildTemplateService;
import com.th.coupon.service.ITemplateBaseService;
import com.th.coupon.vo.TemplateRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 优惠卷模板相关功能控制器
 * @author 涂航
 */
@Slf4j
@RestController
public class CouponTemplateController {

    /**
     * 构建优惠卷模板服务
     */
    private final IBuildTemplateService buildTemplateService;

    /**
     * 优惠卷模板基本功能服务
     */
    private final ITemplateBaseService templateBaseService;

    @Autowired
    public CouponTemplateController(IBuildTemplateService buildTemplateService, ITemplateBaseService templateBaseService) {
        this.buildTemplateService = buildTemplateService;
        this.templateBaseService = templateBaseService;
    }

    /**
     * 构建优惠卷模板
     * url(127.0.0.1:7001/coupon-template/template/build)
     * url(127.0.0.1:10011/discount/coupon-template/template/build) 网关API
     * @param request {@link TemplateRequest} 优惠卷模板请求对象
     * @return {@link CouponTemplate} 优惠卷模板
     * @throws BaseCloudException
     */
    @PostMapping("/template/build")
    public CouponTemplate buildTemplate(@RequestBody TemplateRequest request) throws BaseCloudException{
        log.info("Build Template : {}", JSON.toJSONString(request));
        return buildTemplateService.buildTemplate(request);
    }

    /**
     * 构建优惠卷模板详情
     * url(127.0.0.1:7001/coupon-template/template/info?id=1)
     * url(127.0.0.1:10011/discount/coupon-template/template/info?id=1) 网关API
     * @param id 优惠卷模板id
     * @return @link CouponTemplate} 优惠卷模板
     */
    @GetMapping("/template/info")
    public CouponTemplate buildTemplateInfo(@RequestParam("id") Integer id) throws BaseCloudException{
        log.info("Build Template info for: {}", id);
        return templateBaseService.buildTemplateInfo(id);
    }

    /**
     * 查找所有可用优惠卷模板
     * url(127.0.0.1:7001/coupon-template/template/sdk/all)
     * url(127.0.0.1:10011/discount/coupon-template/template/sdk/all) 网关API
     * @return
     */
    @GetMapping("/template/sdk/all")
    public List<CouponTemplateSdk> findAllUsableTemplate(){
        log.info("Find All Usable Template.");
        return templateBaseService.findAllUsableTemplate();
    }

    /**
     * 获取模板ids 到 CouponTemplateSdk 的映射
     * url(127.0.0.1:7001/coupon-template/template/sdk/infos)
     * url(127.0.0.1:10011/discount/coupon-template/template/sdk/infos?ids=11,12) 网关API
     * @return
     */
    @GetMapping("/template/sdk/infos")
    public Map<Integer,CouponTemplateSdk> findIds2TemplateSdk(@RequestParam("ids")  Collection<Integer> ids){
        log.info("findIds2TemplateSdk: {}",JSON.toJSONString(ids));
        return templateBaseService.findIds2TemplateSdk(ids);
    }
}
